"""
捕获异常
"""

"""
基本语法

try:
    可能发生错误的代码
except:
    如果出现异常执行的代码

"""
print("======================================")
try:
    f = open("F:/test.txt", "r")
except:
    print("换读的方式打开文件！")
    f = open("test.txt", "w")
    f.close()


"""
捕获指定异常
① 如果尝试执行的代码的异常类型和要捕获的异常类型不一致，则无法捕获异常。
② 一般try下方只放一行尝试执行的代码。
"""
print("======================================")
try:
    print(name)
except NameError as e:
    print("出现了变量未定义的情况！")
    print(e)

"""
捕获多个异常

当捕获多个异常时，可以把要捕获的异常类型的名字，放到except 后，并使用元组的方式进行书写。
"""
print("======================================")
try:
    print(age)
except (NameError, ZeroDivisionError) as e:
    if type(e) == NameError:
        print("出现了变量未定义的情况！")
        print(e)
    if type(e) == ZeroDivisionError:
        print("出现了除数为0的情况！")
        print(e)

print("======================================")
try:
    print(1 / 0)
except (NameError, ZeroDivisionError) as e:
    if type(e) == NameError:
        print("出现了变量未定义的情况！")
        print(e)
    if type(e) == ZeroDivisionError:
        print("出现了除数为0的情况！")
        print(e)


"""
捕获所有异常
"""
print("======================================")
try:
    print(1 / 0)
except Exception as e:
    print("已经出现异常")


"""
异常else

else表示的是如果没有异常要执行的代码。
"""
print("======================================")
try:
    print(1 / 0)
except Exception as e:
    print("已经出现异常")
    print(type(e))  # <class 'ZeroDivisionError'>
else:
    print("没有异常继续执行")

print("======================================")
try:
    print(44)
except Exception as e:
    print("已经出现异常")
else:
    print("没有异常继续执行")


"""
异常的finally

finally表示的是无论是否异常都要执行的代码，例如关闭文件
"""
print("======================================")
try:
    print(1 / 0)
except Exception as e:
    print("已经出现异常")
else:
    print("没有异常继续执行")
finally:
    print("无论出没出异常都执行")

print("======================================")
try:
    print(44)
except Exception as e:
    print("已经出现异常")
else:
    print("没有异常继续执行")
finally:
    print("无论出没出异常都执行")
